package persistence.dao;

import org.hibernate.Session;

import persistence.model.Personne;
import persistence.model.Projet;
import persistence.model.Tache;
import util.HibernateUtil;

public class TacheDAO {

	/**
	 * La prŽsence d'un constructeur privŽ supprime le constructeur public par
	 * dŽfaut.
	 */
	private TacheDAO() {

	}

	private static TacheDAO INSTANCE = null;

	/**
	 * Le mot-clŽ synchronized sur la mŽthode de crŽation emp�che toute
	 * instanciation multiple même par différents threads. Retourne l'instance
	 * du singleton.
	 */
	public synchronized static TacheDAO getInstance() {
		if (INSTANCE == null) {
			INSTANCE = new TacheDAO();
		}
		return INSTANCE;
	}

	public void delete(Tache tache) {
		final Session session = HibernateUtil.getSessionFactory()
				.getCurrentSession();
		session.beginTransaction();
//		Projet projet = (Projet) session.get(Projet.class, tache.getProjet()
//				.getIdProjet());
		Tache tache2 = (Tache) session.get(Tache.class, tache.getIdTache());
		for (Personne personne : tache.getPersonne()) {
			personne = (Personne) session.get(Personne.class,
					personne.getIdPersonne());
			personne.getTache().remove(tache2);
		}
//		projet.getTache().remove(tache2);
		session.delete(tache2);
		session.getTransaction().commit();
	}

	public Tache create(Tache tache) {
		final Session session = HibernateUtil.getSessionFactory()
				.getCurrentSession();
		session.beginTransaction();
		session.save(tache);
		session.getTransaction().commit();
		return tache;
	}

	public void update(Tache tache) {
		final Session session = HibernateUtil.getSessionFactory()
				.getCurrentSession();
		session.beginTransaction();
		Tache tacheTemp = (Tache) session.get(Tache.class, tache.getIdTache());
		tacheTemp.setCommentaireTache(tache.getCommentaireTache());
		tacheTemp.setNomTache(tache.getNomTache());
		tacheTemp.setDebutTache(tache.getDebutTache());
		tacheTemp.setFinTache(tache.getFinTache());
		tacheTemp.setStatutTache(tache.getStatutTache());
		session.update(tacheTemp);
		session.getTransaction().commit();
	}

}
